package cn.moefly.algorithm.sort;

import java.util.function.BiFunction;

public class SelectionSort implements SortAlgoRithm {

    /**
     * 选择排序
     *
     * 注意事项：
     *  1. 还是边界问题，debug发现第一次写的时候，二层循环里没有照顾到最后一个数字，原因是受之前的错误影响，导致我一开始就定义了j < arr.length-1，
     *      但是因为选择排序没有进行+1项对比的操作，所以其实这里不用考虑这个东西
     *
     */
    @Override
    public int[] sort(int[] source, int type) {
        BiFunction<Integer,Integer,Boolean> compare = type == ASC ? GT : LT ;
        var arr = source.clone();
        for (int i=0; i < arr.length; ++i){
            int ptr = i;
            for (int j = i; j < arr.length; ++j){
                if (compare.apply(arr[ptr],arr[j])){
                    ptr = j;
                }
            }
            if (ptr != i){
                arr[ptr] ^= arr[i];
                arr[i] ^= arr[ptr];
                arr[ptr] ^= arr[i];
            }
        }
        return arr;
    }


}
